package com.tgu.home_action.dao;

import com.tgu.home_action.pojo.Admin;
import com.tgu.home_action.pojo.Case;
import com.tgu.home_action.pojo.VolunteerInformation;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface VolunteerInformationMapper {
    VolunteerInformation getInformation(VolunteerInformation volunteerInformation);

    /**
     * 通过id查询志愿者信息
     */
    @Select("select * from volunteer_information where volunteer_id=#{volunteerId}")
    VolunteerInformation getInformationByVolunteerId(int volunteerId);

    /**
     * 通过姓名和身份证查询志愿者信息
     */
    @Select("select * from volunteer_information where name=#{name} and idcard=#{IDCard}")
    VolunteerInformation getInformationByNameAndIDCard(@Param("name") String name, @Param("IDCard") String IDCard);

    /**
     * 绑定志愿者
     */
    @Update("update volunteer_information set volunteer_id=#{volunteerId},register_time=#{registerTime} where id=#{id}")
    void bindVolunteer(VolunteerInformation volunteerInformation);

    /**
     * 解除绑定
     */
    @Update("update volunteer_information set volunteer_id=null where id=#{id}")
    void unbindVolunteer(int id);

    /**
     * 修改个人信息
     */
    Boolean updateInformation(VolunteerInformation volunteerInformation);

    /**
     * 获取所有志愿者的非隐私信息（id,name,city,district,province,volunteer_id）
     */
    List<VolunteerInformation> getAllVolunteer(VolunteerInformation volunteerInformation);

    /**
     * 通过InformationId获取志愿者信息
     */
    VolunteerInformation getVolunteerById(int informationId);

    /**
     * 获取姓名
     */
    @Select("select name from volunteer_information where volunteer_id=#{volunteerId}")
    String getNameByVolunteerId(Integer volunteerId);

    /**
     * 获取在某区内的所有志愿者ID
     */
    @Select("select volunteer_id from volunteer_information where province=#{province} and city=#{city} and district=#{district}")
    Integer[] getVolunteerIdByPlace(Case nowCase);

    /**
     * 获取在某区内的不在线的所有志愿者ID
     */
    Integer[] getVolunteerIdByPlaceNotOnline(@Param("onlineIds") List<Integer> onlineIds, @Param("case") Case nowCase);

    /**
     * 志愿者查询志愿者信息
     */
    List<VolunteerInformation> adminGetVolunteer(VolunteerInformation volunteerInformation);

    /**
     * 插入志愿者
     *
     * @return
     */
    @Insert("insert into volunteer_information (name,idcard,sex,province,city,district,address) " +
            "values (#{name},#{IDCard},#{sex},#{province},#{city},#{district},#{address})")
    Boolean insertVolunteer(VolunteerInformation volunteerInformation);

    /**
     * 批量插入志愿者
     */
    Boolean batchInsertVolunteer(List<VolunteerInformation> list);

    /**
     * 管理员修改志愿者信息
     */
    void adminUpdateInformation(VolunteerInformation volunteerInformation);

    /**
     * 查询符合条件的志愿者数量
     */
    int getAccordVolunteerNum(VolunteerInformation volunteerInformation);

    /**
     * 管理员通过Id查询志愿者
     */
    VolunteerInformation adminGetVolunteerById(Integer id);

    /**
     * 通过信息ID查询志愿者信息
     */
    @Select("select * from volunteer_information where id=#{id}")
    VolunteerInformation getById(Integer id);

    @Delete("delete from volunteer_information where id=#{id}")
    void delVolunteer(Integer id);

    /**
     * 查询在线的志愿者数量
     */
    int getOnlineVolunteerNumber(VolunteerInformation volunteerInformation, List<Integer> volunteerIds);

    /**
     * 获取志愿者数量
     */
    Integer getVolunteerNumber(VolunteerInformation volunteerInformation);

    /**
     * 获得已注册的志愿者数量
     */
    Integer getRegisterNum(Admin admin);

}
